package cn.itcast.nems.journal.service;

import cn.itcast.ic.common.bean.Page;
import cn.itcast.nems.common.PageQueryModel;
import cn.itcast.nems.journal.dto.*;
import cn.itcast.nems.studentrecord.bo.JournalClazzModel;
import cn.itcast.nems.studentrecord.dao.dataobject.JournalFinalDO;
import com.baomidou.mybatisplus.core.metadata.IPage;

import java.util.List;

/**
 * <p>
 * 结课凭单-头 服务类
 * </p>
 *
 * @author CodeGenerator
 * @since 2024-01-04
 */
public interface JournalFinalService {

    int  refreshLines(String journalId) ;
    
    /**
     * <p>
     * 结课凭单分页查询
     * </p>
     *
     * @author zhouwei
     * @since 2024/1/10 7:41 PM
     **/
    IPage<JournalFinalDO> pageList(PageQueryModel<JournalFinalModel> pageQueryModel) ;
    
    /**
     * 
     * 功能描述：保存结课凭单
     *
     * @param journalFinalEditDTO 结课凭单用户输入数据
     * @return 是否保存成功
     * 
     * @author 刘曙
     *
     * @since 2024年1月4日
     *
     * @update:[变更日期YYYY-MM-DD][更改人姓名][变更描述]
     */
    String save(JournalFinalEditDTO journalFinalEditDTO);
    
    /**
     * 
     * 功能描述：更新结课凭单 <p/>
     * 注：只有“待审批”状态的凭单才允许修改
     *
     * @param journalFinalEditDTO 更新内容
     * @return 是否更新成功
     * 
     * @author 刘曙
     *
     * @since 2024年1月4日
     *
     * @update:[变更日期YYYY-MM-DD][更改人姓名][变更描述]
     */
    List<JournalFinalClazzLockRecordDTO> update(JournalFinalEditDTO journalFinalEditDTO);

    /**
     * 分页列表-提交审批
     * @param id 凭单ID
     */
    List<JournalFinalClazzLockRecordDTO>  flow(String id) ;
    
    /**
     * 
     * 功能描述：删除结课凭单 <p/>
     * 注：只能逻辑删除
     *
     * @param id 结课凭单ID
     * @return 是否删除成功
     * 
     * @author 刘曙
     *
     * @since 2024年1月4日
     *
     * @update:[变更日期YYYY-MM-DD][更改人姓名][变更描述]
     */
    boolean removeById(String id);
    
    /**
     * 
     * 功能描述：获取单个结课凭单
     *
     * @param id 结课凭单ID
     * @return 结课凭单信息
     * 
     * @author 刘曙
     *
     * @since 2024年1月4日
     *
     * @update:[变更日期YYYY-MM-DD][更改人姓名][变更描述]
     */
    JournalFinalDTO getById(String id);
    /**
     * <p>
     * 根据班级ID查询开班时间、预计结课时间、在籍学员和在途学员
     * </p>
     *
     * @param clazzId 班级ID
     * @return 班级及相关学籍信息
     * @author zhouwei
     * @since 2024/1/12 9:34 AM
     **/
    JournalFinalClazzDTO getClazzInfoByClazzId(Integer clazzId ) ;

    /**
     * 查询凭单涉及的目标班级
     * @param queryModel 查询条件
     * @return 班级列表
     */
    Page<JournalClazzDTO> findClazzList4PageSearch(PageQueryModel<JournalClazzModel> queryModel)  ;

}
